import axios from 'axios';
import {ElMessageBox, ElMessage} from 'element-plus'

// 创建一个 axios 实例
const httpRequest = axios.create({
    baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
    timeout: 5000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=utf-8'  // 关键：指定JSON格式
    }
});

// 请求拦截器
httpRequest.interceptors.request.use(config => {
    //获取发送之前的数据
    console.log(config);
    console.log("发送请求之前 data: ",   config.data);
    // 在发送请求之前做些什么，例如添加 token
    // const token = localStorage.getItem('token');
    // if (token) {
    //     config.headers['Authorization'] = `Bearer ${token}`;
    // }
    return config;
}, error => {
    // 处理请求错误
    console.log(error);
    Promise.reject(error);
});

// 响应拦截器
httpRequest.interceptors.response.use(res => {
    if (res.status !== 200) {
        Promise.reject('network error')
        return
    }
    // 未设置状态码则默认成功状态
    const {code, msg} = res.data
    // 二进制数据则直接返回
    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
        return res
    }
    if (code === 404){
        return Promise.reject(res.data)
    }
    if (code === 401) {
        ElMessageBox.confirm('登录状态已过期，请重新登录', '系统提示', {
            confirmButtonText: '重新登陆', cancelButtonText: '取消', type: 'warning'
        }).then(() => {
            ElMessageBox.close()
        })
        return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
    } else if (code === 0 || code === 1 || code === 110 || code === 101 || code === 403 || code === 500 || code === 429) {
        ElMessage({
            message: msg, type: 'error'
        })
        return Promise.reject(res.data)
    } else {
        //返回标准 code/msg/data字段
        return res.data
    }
}, error => {
    // 处理响应错误
    console.log('err' + error);
    return Promise.reject(error);
});

export default httpRequest;    